﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DataCentral.UsecaseControllers;
using DataCentral.BusinessDataObjects;
using CommonData;

namespace DataCentral.Forms
{
    public partial class ChangePasswordForm : CommonChildForm
    {
        private ChangePasswordUsecase _UCChangePassword;
        private UserBO _UserBO;
        public ChangePasswordForm(ChangePasswordUsecase _UCChangePassword, UserBO _UserBO)
        {
            InitializeComponent();
            this._UCChangePassword = _UCChangePassword;
            this._UserBO = _UserBO;

            btnSave.ToolTip = "Lưu thông tin của tài khoản.\r\n\r\nPhím nóng: Ctrl + S";
            btnClose.ToolTip = "Đóng màn hình thông tin của tài khoản.\r\n\r\nPhím nóng: Escape";
            txtUser.ToolTip = "Hiển thị đầy đủ thông tin của người dùng trên màn hình chỉnh sửa người dùng.\r\n\r\nPhím nóng: Ctrl + P";
        }

        private bool IsValidNewPassword()
        {
            bool isValid = true;
            errProvider.ClearErrors();

            if (string.IsNullOrEmpty(txtVerify.Text))
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtVerify, ConstantClass._Error_VerifyPassNotBlank);
                isValid = false;
            }

            if (string.IsNullOrEmpty(txtNewPass.Text))
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtNewPass, ConstantClass._Error_PassNotBlank);
                isValid = false;
            }

            if (string.IsNullOrEmpty(txtPassword.Text))
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtPassword, ConstantClass._Error_PassNotBlank);
                isValid = false;
            }

            if (!string.IsNullOrEmpty(txtNewPass.Text) && !string.IsNullOrEmpty(txtVerify.Text) && !txtNewPass.Text.Equals(txtVerify.Text))
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtNewPass, ConstantClass._Error_InvalidVerifyPass);
                isValid = false;
            }

            if (!string.IsNullOrEmpty(txtNewPass.Text) && !string.IsNullOrEmpty(txtVerify.Text) && txtNewPass.Text.Equals(txtVerify.Text) && txtNewPass.Text.Equals(txtPassword.Text))
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtNewPass, ConstantClass._Error_InvalidNewPass);
                isValid = false;
            }

            if (!string.IsNullOrEmpty(txtPassword.Text) && txtPassword.Text != _UserBO.Password)
            {
                CommonFunctions.ShowErrorProvider(errProvider, txtPassword, ConstantClass._Error_InvalidUser);
                isValid = false;
            }

            if (!isValid)
                MessageClass.ShowWarningMessage(ConstantClass._Error_InvalidData);
            return isValid;
        }

        private void ChangePasswordForm_Load(object sender, EventArgs e)
        {
            txtUser.Text = _UserBO.UserName;
        }


        private void txtUser_OpenLink(object sender, DevExpress.XtraEditors.Controls.OpenLinkEventArgs e)
        {
            if (MessageClass.ShowQuestionMessage("Bạn có muốn thực hiện thay đổi nhiều thông tin hơn trên màn hình thông tin cá nhân?") == DialogResult.Yes)
            {
                _UCChangePassword.ShowUserProfile(_UserBO);
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (IsValidNewPassword())
            {
                _UserBO.Password = txtNewPass.Text;
                _UserBO.LastUpdatedDate = DateTime.Now;
                _UserBO.LastUpdatedUserID = StaticClass.GetUserLogin();
                UserBO userBO = new UserBO();
                userBO.UpdateUserBO(_UserBO);
                MessageClass.ShowInformationMessage(ConstantClass._Information_ChangePassSuccess);
                this.Close();
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void ChangePasswordForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.P)
                txtUser_OpenLink(null, null);
            else if (e.Control && e.KeyCode == Keys.S)
                btnSave_Click(null, null);
        }
    }
}